<?php
// +----------------------------------------------------------------------
// | ManniuRead
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://manniuyun.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: heitao <read@manniuyun.com>
// +----------------------------------------------------------------------

namespace manniu\controller;

use think\Controller;
use think\Cache;

use app\member\model\Member;

class Base extends Controller{

    // 管理员ID
    public $aid;
    // 管理员信息
    public $admin;
    // 会员ID
    public $uid;
    // 会员信息
    public $member;
    // 当前 模块/控制器/方法 生成的url
    public $currentActionUrl;

	/**
	 * 初始化
	 */
    public function _initialize(){
        // ManniuRead系统版本
        define('MANNIUREAD_VERSION', 'alpha_5.0.2');
        // 更新关键缓存
        $this->publicCache();
        // 获取管理员信息
        $this->aid = (int)$this->request->session('admin.aid');
        $this->admin = $this->aid ? $this->request->session('admin/a') : null;
        // 获取用户信息
        $this->uid = (int)$this->request->session('member_uid');
        $this->member = $this->uid ? $this->getMemberInfoByUid($this->uid) : null;
        // 获取当前 模块/控制器/方法 生成的url
        $this->currentActionUrl = url($this->request->module().config('pathinfo_depr').$this->request->controller().config('pathinfo_depr').$this->request->action());
        // 设置模版公共变量
        $this->setTemplatePublicVar();
        // 当前是超级管理员则开启应用Trace
        /*
        if($this->aid == 1){
            config('app_trace', true);
        }
        */
    }

    /**
     * 更新系统公共缓存
     */
    protected function publicCache() {

    }

    /**
     * 设置模版公共变量
     */
    protected function setTemplatePublicVar() {
        $this->assign([
            // 会员信息
            'uid'   => $this->uid,
            'member' => $this->member,
            'is_member_login' => $this->uid ? true : false
        ]);
    }

    /**
     * 根据会员id获取会员信息
     * @return mixed
     */
    protected function getMemberInfoByUid($uid = 0) {
        $uid = (int)$uid;
        if(!$uid){
            return null;
        }
        // 查询数据库
        $member_info = Member::get($uid);
        if(!$member_info){
            return null;
        }
        // 返回缓存数据
        return $member_info;
    }

    /**
     * 数据库字段与网页字段转换
     * @param  $array  转换字段名的数组
     * @param  $method 请求方法
     * @return array   返回数组
     */
    final protected function buildParam($array = [], $method = 'param')
    {
        $result_data = [];
        if (empty($array)) {
            return $this->request->$method();
        } elseif (is_array($array) && !empty($array)) {
            foreach ($array as $index => $item) {
                if (is_numeric($index)) {
                    $result_data[$item] = $this->request->$method($item);
                } else {
                    $result_data[$index] = $this->request->$method($item);
                }
            }
        }
        return $result_data;
    }

    /**
     * 获取模版
     * @access public
     * @param  string   $tpl_file       模版文件
     * @param  bool     $return_path    是否只返回模版路径
     * @return mixed
     */
    protected function getTemplate($tpl_file = '', $return_path = false){
        // 判断是否为手机模版
        $view_path = $this->request->isMobile() ? 'view_mobile' : 'view';
        // 获取默认模版文件
        $default_tpl_file = APP_PATH.$this->request->module().DS.$view_path.DS.strtolower(str_replace('.', DS, $this->request->controller())).DS.strtolower($this->request->action()).'.'.config('template.view_suffix');
        // 没有提供模版则使用默认模版
        $tpl_file = $tpl_file ? $tpl_file : $default_tpl_file;
        // $return_path 为 true，返回文件路径
        if($return_path === true){
            return $tpl_file;
        }
        // 模版存在则返回模版内容
        if(is_file($tpl_file)){
            return $this->fetch($tpl_file);
        }else{
            abort(404,'模版文件不存在'.$tpl_file);
        }
    }
}